package com.koron.rating.classify.bean;

import com.koron.bean.annocation.FillField;
import com.koron.bean.base.BaseBean;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.util.List;

/**
 * @Author: rocky
 * @Date: 2022/1/6 15:51
*/
/**
    * 设备评级-评级单元（树）
    */
@Data
public class RatingUnitBean extends BaseBean implements Serializable {
    /**
    * 主键
    */
    @FillField
    @ApiModelProperty(value="主键")
    private String id;

    /**
    * 设备台账id 关联台账id 只可以选 对应单元类型5、6
    */
    @ApiModelProperty(value="设备台账id 关联台账id 只可以选 对应单元类型4,5、6")
    private String equipmentId;

    /**
    * 设备台账名称 关联台账名称，只可以选  对应单元类型5、6
    */
    @ApiModelProperty(value="设备台账名称 关联台账名称，只可以选  对应单元类型4,5、6")
    private String equipmentName;

    /**
    * 部门id 对应单元类型2，3
    */
    @ApiModelProperty(value="部门id 对应单元类型2，3")
    private String deptId;

    /**
    * 部门name 对应单元类型2，3
    */
    @ApiModelProperty(value="部门name 对应单元类型2，3")
    private String deptName;

    /**
    * 单元名称、设备名称 允许修改
    */
    @ApiModelProperty(value="单元名称、设备名称 允许修改")
    private String name;

    /**
    * 单元类型 数据字典: unit_type 1根节点、2部门、3单位、4单元、5设备、6部件（与台账的业务层级可以对应）
    */
    @ApiModelProperty(value="单元类型 数据字典: unit_type 1根节点、2部门、3单位、4单元、5设备、6部件（与台账的业务层级可以对应）")
    private String unitType;

    /**
    * 父级ID 默认有一个根节点
    */
    @ApiModelProperty(value="父级ID 默认有一个根节点")
    private String parentId;

    /**
    * 父级名称
    */
    @ApiModelProperty(value="父级名称")
    private String parentName;

    /**
    * 层级
    */
    @ApiModelProperty(value="层级")
    private Integer level;

    /**
    * 层级编码 从1开始,限制最多999
    */
    @ApiModelProperty(value="层级编码 从1开始,限制最多999")
    private Integer levelCode;

    /**
    * 层级路径 拼装而成，用来查询子节点：1/23/45/999
    */
    @ApiModelProperty(value="层级路径 拼装而成，用来查询子节点：1/23/45/999")
    private String levelPath;

    /**
    * 全路径单元id
    */
    @ApiModelProperty(value="全路径单元id")
    private String fullPathCode;

    /**
    * 全路径台账名称
    */
    @ApiModelProperty(value="全路径台账名称")
    private String fullPathName;

    /**
    * 设备分类ID 通过分类，关联出评级标准，前端自动加载在规则内匹配到的第一个评级标准
    */
    @ApiModelProperty(value="设备分类ID 通过分类，关联出评级标准，前端自动加载在规则内匹配到的第一个评级标准")
    private String typeId;

    /**
    * 设备分类名称
    */
    @ApiModelProperty(value="设备分类名称")
    private String typeName;

    /**
    * 评级标准id
    */
    @ApiModelProperty(value="评级标准id")
    private String ratingId;

    /**
    * 适用范围
    */
    @ApiModelProperty(value="适用范围")
    private String usableRange;

    /**
    * 专业 数据字典:common_major
    */
    @ApiModelProperty(value="专业 数据字典:common_major")
    private String major;

    /**
    * 是否主要设备
    */
    @ApiModelProperty(value="是否主要设备")
    private Boolean iscore = false;

    /**
    * 排序字段
    */
    @ApiModelProperty(value="排序字段")
    private Integer sort;

    @ApiModelProperty(value = "设备管理单位id 前端组件相关")
    private String unitId;

    @ApiModelProperty(value = "设备管理单位名称 前端组件相关")
    private String unitName;

    /**
    * 数据来源 导入方便标识备用字段
    */
    @ApiModelProperty(value="数据来源 导入方便标识备用字段")
    private String dataSources;

    @javax.persistence.Transient
    @ApiModelProperty(value = "子节点")
    private List<RatingUnitBean> children;

    @javax.persistence.Transient
    @ApiModelProperty(value = "是否有子集")
    private Boolean hasChildren;

    @javax.persistence.Transient
    @ApiModelProperty(value = "子集个数")
    private int childrenNum;

    @FillField
    @ApiModelProperty(value = "删除标志", hidden = true)
    private Integer deleteFlag = 0;

    private static final long serialVersionUID = 1L;


    public Boolean getHasChildren() {
        return this.childrenNum > 0;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof RatingUnitBean)) return false;

        RatingUnitBean bean = (RatingUnitBean) o;

        if (equipmentId != null ? !equipmentId.equals(bean.equipmentId) : bean.equipmentId != null) return false;
        if (equipmentName != null ? !equipmentName.equals(bean.equipmentName) : bean.equipmentName != null)
            return false;
        if (deptId != null ? !deptId.equals(bean.deptId) : bean.deptId != null) return false;
        if (deptName != null ? !deptName.equals(bean.deptName) : bean.deptName != null) return false;
        if (name != null ? !name.equals(bean.name) : bean.name != null) return false;
        if (unitType != null ? !unitType.equals(bean.unitType) : bean.unitType != null) return false;
        if (parentId != null ? !parentId.equals(bean.parentId) : bean.parentId != null) return false;
        if (parentName != null ? !parentName.equals(bean.parentName) : bean.parentName != null) return false;
        if (level != null ? !level.equals(bean.level) : bean.level != null) return false;
        if (levelCode != null ? !levelCode.equals(bean.levelCode) : bean.levelCode != null) return false;
        if (levelPath != null ? !levelPath.equals(bean.levelPath) : bean.levelPath != null) return false;
        if (fullPathCode != null ? !fullPathCode.equals(bean.fullPathCode) : bean.fullPathCode != null) return false;
        if (fullPathName != null ? !fullPathName.equals(bean.fullPathName) : bean.fullPathName != null) return false;
        if (typeId != null ? !typeId.equals(bean.typeId) : bean.typeId != null) return false;
        if (typeName != null ? !typeName.equals(bean.typeName) : bean.typeName != null) return false;
        if (ratingId != null ? !ratingId.equals(bean.ratingId) : bean.ratingId != null) return false;
        if (usableRange != null ? !usableRange.equals(bean.usableRange) : bean.usableRange != null) return false;
        if (major != null ? !major.equals(bean.major) : bean.major != null) return false;
        if (iscore != null ? !iscore.equals(bean.iscore) : bean.iscore != null) return false;
        if (sort != null ? !sort.equals(bean.sort) : bean.sort != null) return false;
        if (unitId != null ? !unitId.equals(bean.unitId) : bean.unitId != null) return false;
        if (unitName != null ? !unitName.equals(bean.unitName) : bean.unitName != null) return false;
        if (deleteFlag != null ? !deleteFlag.equals(bean.deleteFlag) : bean.deleteFlag != null) return false;
        return dataSources != null ? dataSources.equals(bean.dataSources) : bean.dataSources == null;
    }

}
